import axios from 'axios'
import router from '../router/index'
import { Message, MessageBox } from "element-ui"
import { getLocalStorage, deLcalStorage } from "./storage";
// 封装错误提示
const Tip = msg => {
    Message({
        showClose: true,
        message: msg,
        type: "warning"
    })
}

/**
 * 创建axios
 */

let serve = axios.create({ timeout: 3600000 })

//设置post请求头 json类型用于接收
serve.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8";





//  设置拦截器
serve.interceptors.request.use(
    config => {
        /**
         * config 拦截的相关信息
         * config.headers 中査看获取
         */
        console.log(config);
        let token = (sessionStorage.token && getLocalStorage('token')) ? sessionStorage.token : "";
        config.headers.common['Authorization'] = 'Bearer ' + token;

        // 全局增加账户Account
        // 屏蔽登录的接口
        if (config.url.indexOf('changeOrgUserPwd') != -1) {
            config.data.Account = config.data.account;
        } else if (config.url.indexOf('requestToken') != -1 || config.url.indexOf('login') != -1) {
            // 屏蔽某些接口里的值
        } else {
            try {
                if (config.data.Account == '!@#$%^&(*)_#$%^&*()&') {
                    config.data.Account = '!@#$%^&(*)_#$%^&*()&';
                } else if (config.data.Account == 'empty') {
                    config.data.Account = '';
                } else {
                    config.data.Account = getLocalStorage("userName");
                }
                console.log('config.data.Account', config.data.Account);

            } catch (error) {
                // console.log(error);
            }
        }

        // 格式化数据



        try {
            if (Object.hasOwn(config.data, 'dmgCode')) config.data.dmgCode = config.data.dmgCode == null || config.data.dmgCode.trim() == '' ? 0 : Number(config.data.dmgCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'DmgCode')) config.data.DmgCode = config.data.DmgCode == null || config.data.DmgCode.trim() == '' ? 0 : Number(config.data.DmgCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'macCode')) config.data.macCode = config.data.macCode == null || config.data.macCode.trim() == '' ? 0 : Number(config.data.macCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'MacCode')) config.data.MacCode = config.data.MacCode == null || config.data.MacCode.trim() == '' ? 0 : Number(config.data.MacCode);
        } catch (error) {
            // console.log(error);
        }

        try {
            if (Object.hasOwn(config.data, 'pltCode')) config.data.pltCode = config.data.pltCode == null || config.data.pltCode.trim() == '' ? 0 : Number(config.data.pltCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'PltCode')) config.data.PltCode = config.data.PltCode == null || config.data.PltCode.trim() == '' ? 0 : Number(config.data.PltCode);
        } catch (error) {
            // console.log(error);
        }

        try {
            if (Object.hasOwn(config.data, 'CtgCode')) config.data.CtgCode = config.data.CtgCode == null || config.data.CtgCode.trim() == '' ? 0 : Number(config.data.CtgCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'ctgCode')) config.data.ctgCode = config.data.ctgCode == null || config.data.ctgCode.trim() == '' ? 0 : Number(config.data.ctgCode);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'WrkClsCode')) config.data.WrkClsCode = config.data.WrkClsCode == null || config.data.WrkClsCode.trim() == '' ? 0 : Number(config.data.WrkClsCode);
        } catch (error) {
            // console.log(error);
        }

        try {
            if (Object.hasOwn(config.data, 'posNo')) config.data.posNo = !config.data.posNo || config.data.posNo == null || config.data.posNo.trim() == '' ? 0 : Number(config.data.posNo);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'PosNo')) config.data.PosNo = !config.data.PosNo || config.data.PosNo == null || config.data.PosNo.trim() == '' ? 0 : Number(config.data.PosNo);
        } catch (error) {
            // console.log(error);
        }
        try {
            if (Object.hasOwn(config.data, 'ClsType')) config.data.ClsType = !config.data.ClsType || config.data.ClsType == null || config.data.ClsType.trim() == '' ? 0 : Number(config.data.ClsType);
        } catch (error) {
            // console.log(error);
        }




        // config.data.lan = parseInt(getLocalStorage("lang") == "1" ? 2 : 1);
        // if (sessionStorage.token) {

        // }else if (getLocalStorage('token')){
        //     serve.defaults.headers.common['Authorization'] = 'Bearer ' + getLocalStorage('token');
        // }else{
        //     serve.defaults.headers.common['Authorization'] = ''
        // }
        return config
    },
    error => Promise.error(error)
)


//封装不同的状态码 対应提示不同信息
const errorHandle = status => {
    switch (status) {
        case 401:
            if (getLocalStorage('token') && sessionStorage.token) {
                sessionStorage.token = null
                deLcalStorage('token')
                Tip(`1時間以上操作がありませんでしたので処理を中断しました。再ログインしてください。`)
                // debugger;
                router.replace({
                    path: '/'
                }).catch(() => { });
                // sessionStorage.token = null
                // deLcalStorage('token')
                return
            }
            break;
        // case 403:
        // Tip("Token expired!")
        // sessionStorage.token = null
        // deLcalStorage('token')
        // router.replace({
        //     path: '/'
        // }).catch(()=>{});
        // break;
        // case 404:
        //     Tip("Error 404!")
        //     break;
        // case 400:
        //     Tip(" Error 400!")
        //     break;
        default:
            // Tip("web error!")
            MessageBox.alert('システムエラーが発生しました。ご迷惑をお掛けして申し訳御座いません。システム管理者に問い合わせください。', '', {
                confirmButtonText: 'OK',
                type: 'warning',
                dangerouslyUseHTMLString: true,
                callback: action => {
                }
            })
            break;
    }
}

// 响应拦截器

serve.interceptors.response.use(
    //请求成功
    // res => (res.status === 200 ? Promise.resolve(res) : Promise.reject(res)),
    res => {
        console.log(res.data);
        console.log(res.data.code);
        var m = '';
        try {
            m = res.data.msg.replace(/\r\n/g, '<br/>');
        } catch (error) {

        }
        if (res.data.code == -1) {
            MessageBox.alert(m, '', {
                confirmButtonText: 'OK',
                type: 'warning',
                dangerouslyUseHTMLString: true,
                callback: action => {
                }
            })
            return
        }
        if (res.data.code == 452) {
            MessageBox.alert(m, '', {
                confirmButtonText: 'OK',
                type: 'warning',
                dangerouslyUseHTMLString: true,
                callback: action => {
                }
            })
            return
        }
        if (res.data.code == 300) {
            if (getLocalStorage('lang') == '1') {
                Tip("该输出対象没有数据")
            } else if (getLocalStorage('lang') == '0') {
                Tip("「エクスポート対象がない」")
            } else {
                Tip("The output object has no data")
            }
        }
        // res.status === 200 ? res.data.code == 309 ? getLocalStorage('lang') == '1' ? Tip("该输出対象没有数据") : getLocalStorage('lang') == '0' ? Tip("「エクスポート対象がない」") : Tip("The output object has no data") : Promise.resolve(res) : Promise.reject(res)
        return res
        // (res.status === 200 ? res.data.code == 309 ? getLocalStorage('lang') == '1' ? Tip("该输出対象没有数据") : getLocalStorage('lang') == '0' ? Tip("「エクスポート対象がない」") : Tip("The output object has no data") : Promise.resolve(res) : Promise.reject(res))
    },

    //请求失败
    error => {
        const { response } = error;
        if (response) {
            //请求已发出但是不在2xx的范围之内 response.data.message是后端返回的错误信息
            if (response.status >= 500) {
                // Tip(`api err ${response.data.message}`)
                MessageBox.alert('システムエラーが発生しました。ご迷惑をお掛けして申し訳御座いません。システム管理者に問い合わせください。', '', {
                    confirmButtonText: 'OK',
                    type: 'warning',
                    dangerouslyUseHTMLString: true,
                    callback: action => {
                    }
                })
            }
            errorHandle(response.status, response.data.message)
            return Promise.reject(response)
        } else {
            MessageBox.alert('システムエラーが発生しました。ご迷惑をお掛けして申し訳御座いません。システム管理者に問い合わせください。', '', {
                confirmButtonText: 'OK',
                type: 'warning',
                dangerouslyUseHTMLString: true,
                callback: action => {
                }
            })
        }
    }
)

export default serve